/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package GUI.Productos;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import tablasBD.Producto;

/**
 *
 * @author dianacha
 */
public class FormularioProducto extends JDialog implements ActionListener{
    private JLabel lProducto;
    private JTextField codProd;
    private JTextField nomProd;
    private JTextField imaProd;
    private JTextField empFabr;
    private JTextField descrip;
    private JTextField preUnit;
    private JTextField fecIpre;
    private JTextField fecFpre;
    private JTextField descAct;
    private JTextField fecIdes;
    private JTextField fecFdes;
    private JTextField porcIva;
    private JTextField unidIng;
    private JTextField sucursal;
    private JButton bConsultarProducto;
    private JButton bCrear;
    private JButton bModificar;
    private JButton bEliminar;
    private JComboBox cAccionesBoton;
    private JComboBox cTiposProducto;
    private final boolean[] permisos;
    private int eleccion;
    private ArrayList datos;
    private ArrayList datosExtra;
        
    public FormularioProducto(JFrame framePadre, boolean modal, String tipoUser, boolean[] permisos){
        super(framePadre, modal);
        setTitle("Cajero Cocos - Productos - "+tipoUser);
        //Image icono = Toolkit.getDefaultToolkit().getImage("images/logo25x25.jpg");
        //setIconImage(icono);
        this.permisos=permisos;
        inicializarComponentes();
        organizarComponentes();
        pack();
        setResizable(false);
        setVisible(true);
    }

    private void inicializarComponentes() {
        lProducto = new JLabel("Gestión Productos", new ImageIcon("/GUI/images/shopping-bag-96x96.png"), SwingConstants.LEFT);
	lProducto.setFont(new Font("Arial", Font.BOLD, 18));
	lProducto.setForeground(new Color(78,79,99,190));
        
        codProd = new JTextField();
        nomProd = new JTextField();
        imaProd = new JTextField();
        empFabr = new JTextField();
        descrip = new JTextField();
        preUnit = new JTextField();
        fecIpre = new JTextField();
        fecFpre = new JTextField();
        descAct = new JTextField();
        fecIdes = new JTextField();
        fecFdes = new JTextField();
        porcIva = new JTextField();
        unidIng = new JTextField();
        sucursal = new JTextField();
        
        cTiposProducto=new JComboBox();
        cTiposProducto.addItem("Blusa");
        cTiposProducto.addItem("Brasier");
        cTiposProducto.addItem("Chaqueta");
        cTiposProducto.addItem("Jean");
        cTiposProducto.addItem("Libro");
        cTiposProducto.addActionListener(this);
        
        cAccionesBoton=new JComboBox();
        cAccionesBoton.addItem("Crear");
        cAccionesBoton.addItem("Modificar");
        cAccionesBoton.addItem("Eliminar");
        cAccionesBoton.addActionListener(this);
        
	bConsultarProducto = new JButton("busq");
	configurarBoton(bConsultarProducto);
	bCrear = new JButton("Crear");
	configurarBoton(bCrear);
	bModificar = new JButton("Modificar");
	configurarBoton(bModificar);
	bEliminar = new JButton("Eliminar");
	configurarBoton(bEliminar);
        
        habilitarDisponibInicial();
    }
    
    private void configurarBoton(JButton boton) {
        boton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        boton.setOpaque(false);
	boton.setBorderPainted(false);
	boton.setBackground(new Color(0,0,0,0));
	boton.addActionListener(this);
    }
    
    private void habilitarDisponibInicial(){
        
                codProd.setEditable(true);
                nomProd.setEditable(false);
                imaProd.setEditable(false);
                empFabr.setEditable(false);
                descrip.setEditable(false);
                preUnit.setEditable(false);
                fecIpre.setEditable(false);
                fecFpre.setEditable(false);
                descAct.setEditable(false);
                fecIdes.setEditable(false);
                fecFdes.setEditable(false);
                porcIva.setEditable(false);
                unidIng.setEditable(false);
                sucursal.setEditable(false);
                cTiposProducto.setEnabled(false);
                
                cAccionesBoton.setEnabled(true);
                bCrear.setEnabled(false);
                bModificar.setEnabled(false);
                bEliminar.setEnabled(false);
    }

    private void organizarComponentes() {
        /* ****************** Parte Norte Pestanna */
        
        JPanel pBotones = new JPanel(new GridLayout(1,3));
	pBotones.setBackground(new Color(0,0,0,0));
	pBotones.add(bCrear);
	pBotones.add(bModificar);
	pBotones.add(bEliminar);
        
        JPanel pEncab = new JPanel(new BorderLayout(0,10));//ec ef
	pEncab.setBorder(BorderFactory.createEmptyBorder(20,40,0,40));//n,w,s,e
	pEncab.setBackground(new Color(0,0,0,0));
	pEncab.add(lProducto, BorderLayout.NORTH);
	pEncab.add(pBotones, BorderLayout.CENTER);
	pEncab.add(cAccionesBoton, BorderLayout.SOUTH);
        
        /* ****************** Parte Central Pestanna */
        
        JPanel pBusqueda = new JPanel(new BorderLayout());
	pBusqueda.setBackground(new Color(0,0,0,0));
        pBusqueda.add( codProd, BorderLayout.CENTER );
        pBusqueda.add( bConsultarProducto, BorderLayout.EAST );
        
        JPanel pFormulario = new JPanel(new GridLayout(15,2,0,2));
	pFormulario.setBorder(BorderFactory.createEmptyBorder(0,40,20,40));//n,w,s,e
	pFormulario.setBackground(new Color(0,0,0,0));
        
        pFormulario.add( new JLabel( "Codigo del Producto:" ));
        pFormulario.add( pBusqueda );
	pFormulario.add( new JLabel( "Nombre del Producto:" ) );
        pFormulario.add( nomProd );
	pFormulario.add( new JLabel( "Imagen:" ) );
        pFormulario.add( imaProd );
	pFormulario.add( new JLabel( "Empresa Fabricante:" ) );
        pFormulario.add( empFabr );
	pFormulario.add( new JLabel( "Descripción:" ) );
        pFormulario.add( descrip );
	pFormulario.add( new JLabel( "Precio Unitario:" ) );
        pFormulario.add( preUnit );
	pFormulario.add( new JLabel( "Fecha Inicio - Precio:" ) );
        pFormulario.add( fecIpre );
	pFormulario.add( new JLabel( "Fecha Fin - Precio:" ) );
        pFormulario.add( fecFpre );
	pFormulario.add( new JLabel( "Descuento Actual:" ) );
        pFormulario.add( descAct );
	pFormulario.add( new JLabel( "Fecha Inicio - Descuento:" ) );
        pFormulario.add( fecIdes );
	pFormulario.add( new JLabel( "Fecha Fin - Descuento:" ) );
        pFormulario.add( fecFdes );
	pFormulario.add( new JLabel( "Porcentaje IVA:" ) );
        pFormulario.add( porcIva );
	pFormulario.add( new JLabel( "Unidades a Ingresar:" ) );
        pFormulario.add( unidIng );
	pFormulario.add( new JLabel( "Sucursal:" ) );
        pFormulario.add( sucursal );
        pFormulario.add( new JLabel( "Tipo de producto:" ) );
        pFormulario.add( cTiposProducto );
	
	/* ****************** General */
	setLayout(new BorderLayout(0,20)); // eC, eF
	this.add(pEncab, BorderLayout.NORTH);
	this.add(pFormulario, BorderLayout.CENTER);
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
        if(ae.getSource()==bConsultarProducto){
            buscarProducto();
        }
        //
        if(ae.getSource()==cAccionesBoton){
            habilitarAccionActual();
        }
        if(ae.getSource()==bCrear){
            crearProducto();
        }
        if(ae.getSource()==bModificar){
            modificarProducto();
        }
        if(ae.getSource()==bEliminar){
            eliminarProducto();
        }
        //
        if(ae.getSource()==cTiposProducto){
            pedirOtrosDatos();
        }
    }

    private void buscarProducto() {
        JOptionPane.showMessageDialog(this, "producto!");
    }

    private void habilitarAccionActual() {
        String accion = cAccionesBoton.getSelectedItem().toString();
                
        switch(accion){
            case "Crear":
                if(permisos[0]){
                    codProd.setEditable(true);
                    nomProd.setEditable(true);
                    imaProd.setEditable(true);
                    empFabr.setEditable(true);
                    descrip.setEditable(true);
                    preUnit.setEditable(true);
                    fecIpre.setEditable(true);
                    fecFpre.setEditable(true);
                    descAct.setEditable(true);
                    fecIdes.setEditable(true);
                    fecFdes.setEditable(true);
                    porcIva.setEditable(true);
                    unidIng.setEditable(true);
                    sucursal.setEditable(true);
                    cTiposProducto.setEnabled(true);
                    
                    bCrear.setEnabled(true);
                    bModificar.setEnabled(false);
                    bEliminar.setEnabled(false);
                    break;
                }
                else{
                    habilitarDisponibInicial();
                }
            case "Modificar":
                if(permisos[1]){
                    codProd.setEditable(true);
                    nomProd.setEditable(false);
                    imaProd.setEditable(true);
                    empFabr.setEditable(true);
                    descrip.setEditable(true);
                    preUnit.setEditable(true);
                    fecIpre.setEditable(true);
                    fecFpre.setEditable(true);
                    descAct.setEditable(true);
                    fecIdes.setEditable(true);
                    fecFdes.setEditable(true);
                    porcIva.setEditable(true);
                    unidIng.setEditable(false);
                    sucursal.setEditable(true);
                    cTiposProducto.setEnabled(true);
                    
                    bCrear.setEnabled(false);
                    bModificar.setEnabled(true);
                    bEliminar.setEnabled(false);
                    break;
                }
                else{
                    habilitarDisponibInicial();
                }
            case "Eliminar":
                if(permisos[2]){
                    codProd.setEditable(true);
                    nomProd.setEditable(false);
                    imaProd.setEditable(false);
                    empFabr.setEditable(false);
                    descrip.setEditable(false);
                    preUnit.setEditable(false);
                    fecIpre.setEditable(false);
                    fecFpre.setEditable(false);
                    descAct.setEditable(false);
                    fecIdes.setEditable(false);
                    fecFdes.setEditable(false);
                    porcIva.setEditable(false);
                    unidIng.setEditable(false);
                    sucursal.setEditable(false);
                    cTiposProducto.setEnabled(false);
                    
                    bCrear.setEnabled(false);
                    bModificar.setEnabled(false);
                    bEliminar.setEnabled(true);
                    break;
                }
                else{
                    habilitarDisponibInicial();
                }
        }        
    }

    private void pedirOtrosDatos() {
        String tipoProd = cTiposProducto.getSelectedItem().toString();
        switch(tipoProd){
            case "Blusa":
                FormularioBlusa guiBlusa = new FormularioBlusa(this, true);
                datosExtra = guiBlusa.getDatos();
                eleccion = 0;
                break;
            case "Brasier":
                FormularioBrasier guiBrasier = new FormularioBrasier(this, true);
                eleccion = 1;
                break;
            case "Chaqueta":
                FormularioChaqueta guiChaqueta = new FormularioChaqueta(this, true);
                eleccion = 2;
                break;
            case "Jean":
                FormularioJean guiJean = new FormularioJean(this, true);
                eleccion = 3;
                break;
            case "Libro":
                FormularioLibro guiLibro = new FormularioLibro(this, true);
                eleccion = 4;
                break;
        }
    }
    
    private ArrayList capturarDatos(String accion, String tipo){
        datos.add(accion);
        datos.add(tipo);
        datos.add(codProd.getText());
        datos.add(nomProd.getText());
        datos.add(imaProd.getText());
        datos.add(empFabr.getText());
        datos.add(descrip.getText());
        datos.add(preUnit.getText());
        datos.add(fecIpre.getText());
        datos.add(fecFpre.getText());
        datos.add(descAct.getText());
        datos.add(fecIdes.getText());
        datos.add(fecFdes.getText());
        datos.add(porcIva.getText());
        datos.add(unidIng.getText());
        //datos.add(sucursal.getText());
        
        if (eleccion == 0) {
            datos.add(datosExtra.get(0));
            datos.add(datosExtra.get(1));
            datos.add(datosExtra.get(2));
        } if (eleccion == 1 || eleccion == 4) {
            datos.add(datosExtra.get(0));
            datos.add(datosExtra.get(1));
        } if (eleccion == 2) {
            datos.add(datosExtra.get(0));
            datos.add(datosExtra.get(1));
            datos.add(datosExtra.get(2));
            datos.add(datosExtra.get(3));
            datos.add(datosExtra.get(4));
        } if (eleccion == 3) {
            datos.add(datosExtra.get(0));
            datos.add(datosExtra.get(1));
            datos.add(datosExtra.get(2));
            datos.add(datosExtra.get(3));
        }
        return datos;
    }
    
    private void crearProducto() {
        switch(eleccion){
            case 0:
                capturarDatos("crear", "blusa");
                break;
            case 1:
                capturarDatos("crear", "brasier");
                break;
            case 2:
                capturarDatos("crear", "chaqueta");
                break;
            case 3:
                capturarDatos("crear", "jean");
                break;
            case 4:
                capturarDatos("crear", "libro");
                break;
        }
    }
    
    private void modificarProducto() {
        switch(eleccion){
            case 0:
                capturarDatos("modificar", "blusa");
                break;
            case 1:
                capturarDatos("modificar", "brasier");
                break;
            case 2:
                capturarDatos("modificar", "chaqueta");
                break;
            case 3:
                capturarDatos("modificar", "jean");
                break;
            case 4:
                capturarDatos("modificar", "libro");
                break;
        }
    }
    
    public void mostrarProducto(Producto producto){        
        codProd.setText(producto.getCodigo());
        nomProd.setText(producto.getNombre());
        imaProd.setText(producto.getImagen());
        empFabr.setText(producto.getEmpresaFabricante());
        descrip.setText(producto.getDescripcion());
        preUnit.setText(Integer.toString(producto.getPreciosProducto().getPrecio()));
        fecIpre.setText(producto.getPreciosProducto().getFechaInicio().toString());
        fecFpre.setText(producto.getPreciosProducto().getFechaFin().toString());
        descAct.setText(producto.getDescuentosProducto().getDescuento());
        fecIdes.setText(producto.getDescuentosProducto().getFechaInicio().toString());
        fecFdes.setText(producto.getDescuentosProducto().getFechaFin().toString());
        porcIva.setText(Integer.toString(producto.getIva()));
        unidIng.setText(Integer.toString(producto.getUnidadesDisponibles()));
    }
    
    private void eliminarProducto() {
        switch(eleccion){
            case 0:
                capturarDatos("eliminar", "blusa");
                break;
            case 1:
                capturarDatos("eliminar", "brasier");
                break;
            case 2:
                capturarDatos("eliminar", "chaqueta");
                break;
            case 3:
                capturarDatos("eliminar", "jean");
                break;
            case 4:
                capturarDatos("eliminar", "libro");
                break;
        }
    }
}
